8. Destructor try-catch(exception)

소멸자 자원 관리 클래스에서 예외가 발생할 시,
1. 프로그램 종료( std::abort() )
2. 예외를 삼킴: 예외를 무시한 후, 이 후 처리 지속
3. 사용자에게 책임을 위임
class DBConnection{
public:
// ...
static DBConnection create();
void close();
};
class DBConn{ // DBConnection class
public:
// ...
void close(void){
db.close();
closed=true;
}
~DBConn(){
if(!closed){
try{
db.close();
}
catch(...){
// fail log
std::abort(); //
}
}
}
private:
DBConnection db;
bool closed;
};
소멸자는 예외가 빠져 나가서는 안된다.
소멸자 내에서 호출된 함수가 예외를 던질 가능성이 있다면,
어떤 예외이던지 소멸자 내부에서 받아내서 처리해야 한다.

던진 예외에 대해 사용자가 반응을 해야 하는 경우,
소멸자가 아닌 일반 함수에서 연산을 제공해야 함